from enum import Enum

# Commented out blend modes are not implemented yet
class BlendModes(Enum):
    ARITHMETIC_ADDITION = "arithmetic: addition"
    ARITHMETIC_DIVIDE = "arithmetic: divide"
    ARITHMETIC_INVERSE_SUBTRACT= "arithmetic: inverse subtract"
    ARITHMETIC_MULTIPLY = "arithmetic: multiply"
    ARITHMETIC_SUBTRACT= "arithmetic: subtract"

    BINARY_AND = "binary: AND"
    BINARY_CONVERSE = "binary: CONVERSE"
    BINARY_IMPLICATION = "binary: IMPLICATION"
    BINARY_NAND = "binary: NAND"
    BINARY_NOR = "binary: NOR"
    BINARY_NOT_CONVERSE = "binary: NOT CONVERSE"
    BINARY_NOT_IMPLICATION = "binary: NOT IMPLICATION"
    BINARY_OR = "binary: OR"
    BINARY_XNOR = "binary: XNOR"
    BINARY_XOR = "binary: XOR"

    DARKEN_BURN = "darken: burn"
    DARKEN_DARKEN = "darken: darken"
    DARKEN_DARKER_COLOR = "darken: darker color"
    DARKEN_EASY_BURN = "darken: easy burn"
    DARKEN_FOG_DARKEN = "darken: fog darken"
    DARKEN_GAMMA_DARK = "darken: gamma dark"
    DARKEN_LINEAR_BURN = "darken: linear burn"
    DARKEN_SHADE = "darken: shade"

    HSI_COLOR = "hsi: color hsi"
    HSI_HUE = "hsi: hue hsi"
    HSI_SATURATION = "hsi: saturation hsi"
    HSI_INTENSITY = "hsi: intensity"
    HSI_DECREASE_SATURATION = "hsi: decrease saturation hsi"
    HSI_INCREASE_SATURATION = "hsi: increase saturation hsi"
    HSI_DECREASE_INTENSITY = "hsi: decrease intensity"
    HSI_INCREASE_INTENSITY = "hsi: increase intensity"

    HSL_COLOR = "hsl: color hsl"
    HSL_HUE = "hsl: hue hsl"
    HSL_SATURATION = "hsl: saturation hsl"
    HSL_LIGHTNESS = "hsl: lightness"
    HSL_DECREASE_SATURATION = "hsl: decrease saturation hsl"
    HSL_INCREASE_SATURATION = "hsl: increase saturation hsl"
    HSL_DECREASE_LIGHTNESS = "hsl: decrease lightness"
    HSL_INCREASE_LIGHTNESS = "hsl: increase lightness"

    HSV_COLOR = "hsv: color hsv"
    HSV_HUE = "hsv: hue hsv"
    HSV_SATURATION = "hsv: saturation hsv"
    HSV_VALUE = "hsv: value"
    HSV_DECREASE_SATURATION = "hsv: decrease saturation hsv"
    HSV_INCREASE_SATURATION = "hsv: increase saturation hsv"
    HSV_DECREASE_VALUE = "hsv: decrease value"
    HSV_INCREASE_VALUE = "hsv: increase value"

    HSY_COLOR = "hsy: color"
    HSY_HUE = "hsy: hue"
    HSY_SATURATION = "hsy: saturation"
    HSY_LUMINOSITY = "hsy: luminosity"
    HSY_DECREASE_SATURATION = "hsy: decrease saturation"
    HSY_INCREASE_SATURATION = "hsy: increase saturation"
    HSY_DECREASE_LUMINOSITY = "hsy: decrease luminosity"
    HSY_INCREASE_LUMINOSITY = "hsy: increase luminosity"

    LIGHTEN_COLOR_DODGE = "lighten: color dodge"
    LIGHTEN_LINEAR_DODGE = "lighten: linear dodge"
    LIGHTEN_LIGHTEN = "lighten: lighten"
    LIGHTEN_LINEAR_LIGHT = "lighten: linear light"
    LIGHTEN_SCREEN = "lighten: screen"
    LIGHTEN_PIN_LIGHT = "lighten: pin light"
    LIGHTEN_VIVID_LIGHT = "lighten: vivid light"
    LIGHTEN_FLAT_LIGHT = "lighten: flat light"
    LIGHTEN_HARD_LIGHT = "lighten: hard light"
    LIGHTEN_SOFT_LIGHT_IFS_ILLUSIONS = "lighten: soft light (ifs illusions)"
    LIGHTEN_SOFT_LIGHT_PEGTOP_DELPHI = "lighten: soft light (pegtop-delphi)"
    LIGHTEN_SOFT_LIGHT_PS = "lighten: soft light (ps)"
    LIGHTEN_SOFT_LIGHT_SVG = "lighten: soft light (svg)"
    LIGHTEN_GAMMA_LIGHT = "lighten: gamma light"
    LIGHTEN_GAMMA_ILLUMINATION = "lighten: gamma illumination"
    LIGHTEN_LIGHTER_COLOR = "lighten: lighter color"
    LIGHTEN_PNORM_A = "lighten: p-norm a"
    LIGHTEN_PNORM_B = "lighten: p-norm b"
    LIGHTEN_SUPER_LIGHT = "lighten: super light"
    LIGHTEN_TINT_IFS_ILLUSIONS = "lighten: tint (ifs illusions)"
    LIGHTEN_FOG_LIGHTEN_IFS_ILLUSIONS = "lighten: fog lighten (ifs illusions)"
    LIGHTEN_EASY_DODGE = "lighten: easy dodge"
    LIGHTEN_LUMINOSITY_SAI = "lighten: luminosity/shine (sai)"

    # MISC_BUMPMAP = "misc: bumpmap"
    # MISC_COMBINE_NORMAL_MAP = "misc: combine normal map"
    # MISC_DISSOLVE = "misc: dissolve"
    # MISC_COPY_RED = "misc: copy red"
    # MISC_COPY_GREEN = "misc: copy green"
    # MISC_COPY_BLUE = "misc: copy blue"
    # MISC_COPY = "misc: copy"
    # MISC_TANGENT_NORMALMAP = "misc: tangent normalmap"

    MIX_NORMAL = "mix: normal"
    MIX_OVERLAY = "mix: overlay"
    # MIX_OVER = "mix: over"
    # MIX_BEHIND = "mix: behind"
    # MIX_GREATER = "mix: greater"
    # MIX_LAMBERT_LIGHTING_LINEAR = "mix: lambert lighting (linear)"
    # MIX_LAMBERT_LIGHTING_GAMMA_2_2 = "mix: lambert lighting (gamma 2.2)"
    # MIX_ERASE = "mix: erase"
    # MIX_ALPHA_DARKEN = "mix: alpha darken"
    # MIX_HARD_MIX = "mix: hard mix"
    # MIX_HARD_MIX_PS = "mix: hard mix (ps)"
    # MIX_HARD_MIX_SOFTER_PS = "mix: hard mix softer (ps)"
    # MIX_GRAIN_MERGE = "mix: grain merge"
    # MIX_GRAIN_EXTRACT = "mix: grain extract"
    # MIX_PARALLEL = "mix: parallel"
    # MIX_ALLANON = "mix: allanon"
    # MIX_GEOMETRIC_MEAN = "mix: geometric mean"
    # MIX_DESTINATION_ATOP = "mix: destination atop"
    # MIX_DESTINATION_IN = "mix: destination in"
    # MIX_HARD_OVERLAY = "mix: hard overlay"
    # MIX_INTERPOLATION = "mix: interpolation"
    # MIX_INTERPOLATION_2X = "mix: interpolation - 2x"
    # MIX_PENUMBRA_A = "mix: penumbra a"
    # MIX_PENUMBRA_B = "mix: penumbra b"
    # MIX_PENUMBRA_C = "mix: penumbra c"
    # MIX_PENUMBRA_D = "mix: penumbra d"

    MODULO_MODULO = "modulo: modulo"
    MODULO_DIVISIVE_MODULO = "modulo: divisive modulo"
    # MODULO_MODULO_CONTINUOUS = "modulo: modulo - continuous"
    # MODULO_DIVISIVE_MODULO_CONTINUOUS = "modulo: divisive modulo - continuous"
    # MODULO_MODULO_SHIFT = "modulo: modulo shift"
    # MODULO_MODULO_SHIFT_CONTINUOUS = "modulo: modulo shift - continuous"

    NEGATIVE_DIFFERENCE = "negative: difference"
    NEGATIVE_EQUIVALENCE = "negative: equivalence"
    NEGATIVE_ADDITIVE_SUBTRACTIVE = "negative: additive subtractive"
    NEGATIVE_EXCLUSION = "negative: exclusion"
    NEGATIVE_ARCUS_TANGENT = "negative: arcus tangent"
    NEGATIVE_NEGATION = "negative: negation"

    # QUADRATIC_REFLECT = "quadratic: reflect"
    # QUADRATIC_GLOW = "quadratic: glow"
    # QUADRATIC_FREEZE = "quadratic: freeze"
    # QUADRATIC_HEAT = "quadratic: heat"
    # QUADRATIC_GLOW_HEAT = "quadratic: glow-heat"
    # QUADRATIC_HEAT_GLOW = "quadratic: heat-glow"
    # QUADRATIC_REFLECT_FREEZE = "quadratic: reflect-freeze"
    # QUADRATIC_FREEZE_REFLECT = "quadratic: freeze-reflect"
    # QUADRATIC_HEAT_GLOW_FREEZE_REFLECT_HYBRID = "quadratic: heat-glow & freeze-reflect hybrid"
